package controllers;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.Query;

import org.h2.message.DbException;

import controllers.negocioPontoEletronico.ValidarDatas;

import models.LogsTarefa;
import models.PontoEletronico;
import models.Usuario;

import play.db.DB;
import play.db.jpa.JPA;
import play.mvc.Controller;
import sun.text.resources.FormatData;

public class Relatorios extends Controller {

	private static Application ap = new Application();
	
	public static void informarMes() throws SQLException {
		ap.verificarAutenticacao();
		String tipoUsuario = ap.checkAdmin();
		String user = ap.usuario();
		
		render(user, tipoUsuario);
	}

	public static void informarPeriodo() throws SQLException {
		ap.verificarAutenticacao();
		String tipoUsuario = ap.checkAdmin();
		String user = ap.usuario();
		
		render(user, tipoUsuario);
	}

	public static void relatorioMensal(String mes) throws SQLException {
		
		String user = session.get("usuario");
		List<PontoEletronico> pontoE = new ArrayList<PontoEletronico>();

		List<Usuario> usuario = Usuario.find("byUsername", user).fetch();

		ResultSet rs = DB
				.executeQuery("exec relatorioMensal @mes = " + mes +", @usuario = " + user);

		try {
			while (rs.next()) {

				PontoEletronico p = new PontoEletronico(rs.getString("data"),
						rs.getString("horaEntrada"), rs.getString("horaSaida"),
						rs.getString("totalTrabalhado"));

				pontoE.add(p);
			}
		} catch (DbException e) {
			System.out.println("ocorreu um erro inesperado");
		} finally {
			rs.close();
		}
		render(pontoE, user, usuario);
		
	}

	public static void relatorioPeriodo(String data, String data_2)
			throws SQLException {

		System.out.println("data 1: " +data);
		System.out.println("data 2: " +data_2);
		
		boolean dataValida = new ValidarDatas().validarData(data, data_2);
		
		if(dataValida == false){
			flash.error("Informe uma data válida");
			informarPeriodo();
		}
		
		String user = session.get("usuario");
		List<Usuario> usuario = Usuario.find("byUsername", user).fetch();
		List<PontoEletronico> pontoE = new ArrayList<PontoEletronico>();

		ResultSet rs = DB
				.executeQuery("exec relatorioAnalitico @data1 = '" + data +
						"',@data2 = '" + data_2 + "',@usuario ='" + user +"'");

		try {

			while (rs.next()) {
				PontoEletronico p = new PontoEletronico(rs.getString("data"),
						rs.getString("horaEntrada"), rs.getString("horaSaida"),
						rs.getString("totalTrabalhado"));

				pontoE.add(p);
			}

		} catch (Exception e) {
			System.out.println("ocorreu um erro inesperado");
		} finally {
			// rs.close();
		}
		render(pontoE, user, usuario);
		
	}
	
}
